package com.ctrip.framework.apollo.openapi.v1.controller;

import com.ctrip.framework.apollo.common.dto.ClusterDTO;
import com.ctrip.framework.apollo.common.utils.BeanUtils;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.openapi.dto.OpenEnvClusterDTO;
import com.ctrip.framework.apollo.portal.component.PortalSettings;
import com.ctrip.framework.apollo.portal.service.ClusterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.LinkedList;
import java.util.List;

@RestController("openapiAppController")
@RequestMapping("/openapi/v1")
public class AppController {

    @Autowired
    private PortalSettings portalSettings;
    @Autowired
    private ClusterService clusterService;

    @RequestMapping(value = "/apps/{appId}/envclusters", method = RequestMethod.GET)
    public List<OpenEnvClusterDTO> loadEnvClusterInfo(@PathVariable String appId) {

        List<OpenEnvClusterDTO> envClusters = new LinkedList<>();

        List<Env> envs = portalSettings.getActiveEnvs();
        for (Env env : envs) {
            OpenEnvClusterDTO envCluster = new OpenEnvClusterDTO();

            envCluster.setEnv(env.name());
            List<ClusterDTO> clusterDTOs = clusterService.findClusters(env, appId);
            envCluster.setClusters(BeanUtils.toPropertySet("name", clusterDTOs));

            envClusters.add(envCluster);
        }

        return envClusters;

    }

}
